package pkg16b_eca.SQL.Tables;

import java.util.ArrayList;
import java.util.HashMap;
import pkg16b_eca.SQL.Query;
import pkg16b_eca.data.validate.Text;
import se.oru.informatik.InformatikException;

public class SQLProduktion extends Query {
    public SQLProduktion() throws InformatikException {}
    
    /** Inserting values into database. */
    public void insert(final String strTitel, final String strInspelningStart, final String strInspelningSlut, final String strGenre) {
        String query = "insert into produktion (PID, titel, inspelningstart, inspelningslut, genre) values (" + 
                SQLGetAutoIncrement("produktion", "PID") + ", '" + strTitel + "', '" + Text.parseDate(strInspelningStart) + "', '" + Text.parseDate(strInspelningSlut) + "', '" + strGenre  + "')";
        SQLInsert(query);
    }
    
    /** Inserting values into database. */
    public void update(final int intPID, final String strTitel, final String strInspelningStart, final String strInspelningSlut, final String strGenre) {
        String query = "update produktion set titel='" + strTitel + "', inspelningstart='" + Text.parseDate(strInspelningStart) + "', inspelningslut='" + Text.parseDate(strInspelningSlut) + "' where PID=" + intPID;
        SQLUpdate(query);
    }
    
    /** Deleting a value from the database. */
    public void delete(final int intPID) {
        String query = "delete from produktion where PID=" + intPID;
        SQLDelete(query);
    }
    
    /** Check if a value exists. */
    public boolean exists(final String PName) {
        String query = SQLSelect("select titel from produktion where titel = '" + PName + "'");
        return !query.isEmpty();
    }
    
    /** Check if a value exists. */
    public boolean exists(final int PID) {
        String query = SQLSelect("select PID from produktion where PID = '" + PID + "'");
        return !query.isEmpty();
    }
    
    /**Usage Example : Se vilka produktioner som finns i systemet
     *Variables used: al = ArrayList, s = String
     * ArrayList<String> al = SQL.getProduktion().getProduktioner();
        for (String s : al) {
            System.out.println(s);
        }
     */
    public ArrayList<String> getProduktioner() {
        return SQLSelectList("select titel from produktion");
    }
    
    /**Usage Example : Se vilka attribut en produktion har
     *Variables used: hm = HashMap
        HashMap<String, String> hm = SQL.getProduktion().getAttribut("Karma is not a bitch");
        System.out.println(hm.values());
     */
    public HashMap<String, String> getAttribut(String produktionTitel) {
        return SQLSelectRow("select * from produktion " + 
                "where produktion.titel = '" + produktionTitel + "'");
    }
    
    /**Usage Example : Se vilka roller som tillhör en produktion
     *Variables used: al = ArrayList, s = String
        ArrayList<String> al = SQL.getProduktion().getRoller("Angel falls");
        for (String s : al) {
            System.out.println(s);
        }
     */
    public ArrayList<String> getRoller(String produktionsNamn) {
        return SQLSelectList("select roll.namn from roll " + 
                "join produktion on produktion.pid = roll.pid " +
                "where produktion.titel = '" + produktionsNamn + "'");
    }
}
